% !TeX program = xelatex 
\documentclass[xcolor=svgnames,10pt,UTF8]{ctexbeamer}
%\documentclass[aspectratio=169,xcolor=svgnames,10pt]{beamer}

\RequirePackage{slide}

%\logo{\includegraphics[scale=0.015]{../figure/logo.jpg}}
\title{SystemVerilog芯片验证}
\subtitle{第1章~导论}
%\author{王旭}
%\institute{深圳信息职业技术学院~微电子学院}
\date{\today}

\begin{document}

\frame{\titlepage}
%\LogoOn
%\LogoOff

\section{课程内容} \label{sec:course goals}

\begin{frame}[t,fragile]{}

	课程内容

	\begin{itemize}
		\item SysteVerilog验证语言
		\item OOP（封装、派生、继承和多态）
		\item UVM核心机制
	\end{itemize}

	预备知识

	\begin{itemize}
		\item 数字电子技术
		\item Verilog HDL
	\end{itemize}

	课程资源（微信公众号：学验证）

	\begin{itemize}
		\item Linux操作系统、GVim、DVT Eclipse
		\item EDA工具：Synopsys VCS and Verdi
		\item 课程源代码：\href{https://gitee.com/onexu/sv}{https://gitee.com/onexu/sv}
	\end{itemize}

\end{frame}

\section{芯片设计流程}\label{Chip Design Flow}

\begin{frame}[t,fragile]{典型的芯片设计流程}

	\begin{figure}[!htb]
		\centering%\captionsetup{font={small}} %small or scriptsize
		\scalebox{0.8}{
			\begin{tikzpicture}[parent anchor=south,child anchor=north,level distance=1.2cm, sibling distance=4.0cm, every node/.style=draw, thick, -Latex, align=center, color=blue]
				\node (topnode) at (0,4.8) {产品需求}
				child {node {设计规范}
						child {node {系统规范}
								child {node {RTL设计}}
								child {node[color=red] {硅前验证}}
							}
					};
				\node (bottomnode) {逻辑综合}
				child[parent anchor=south, child anchor=north] {node {等价性检查}
						child {node {布局\&布线}
								child {node {硅后验证}
									}
							}
					};
				\foreach \x in {1,2}{
						\draw (topnode-1-1-\x.south) -- (bottomnode.north);
					}
			\end{tikzpicture}
		}
		%\caption{典型的芯片设计流程} \label{basic chip design flow}
	\end{figure}

\end{frame}

\section{功能验证与测试平台}\label{The Fucntion Verification and Testbench}

\begin{frame}[t,fragile]{传统的测试平台结构}

	\begin{enumerate}
		\item 激励是确定值的测试被称为定向测试（direct test）
		\item 激励是随机生成的测试被称为随机测试（random test）
	\end{enumerate}

	\begin{enumerate}
		\item 层次化测试平台通过对激励和验证架构进行分层设计和高层抽象建模，实现对DUT的事务级验证。
		\item 层次化测试平台还可以根据用户指定的约束自动生成激励，对DUT进行受约束随机测试验证。
	\end{enumerate}

	\begin{figure}[!htb]
		\centering%\captionsetup{font={small}}\small %small or scriptsize
		\tikzstyle{every node}=[font=\normalsize]
		\scalebox{0.8}{
			\begin{tikzpicture}%[scale=1.0]
				%\draw[step=1,color=gray] (0,0) grid (8,4);
				\node[thick,draw,minimum height=4.0cm,minimum width=7cm] (DUT) at (3,1.5) {};
				\node at (3,3) {顶层模块};
				\draw[thick,color=red] (0,0) -- (0,2.5) -- (6,2.5) -- (6,0) -- (5,0) -- (5,1.5) -- (1,1.5) -- (1,0) -- cycle;
				\node at (3,2) {测试模块};
				\node[thick,draw,color=blue,minimum height=1.0cm,minimum width=2cm] (DUT) at (3,0.5) {DUT};
				\node[thick,align=center,minimum height=1.0cm,minimum width=1cm] (testout) at (0.5,0.5) {激励};
				\node[thick,align=center,minimum height=1.0cm,minimum width=1cm] (testin) at (5.5,0.5) {响应};
				\draw [thick,-Latex] (testout) to node [above] {输入} (DUT);
				\draw [thick,-Latex] (DUT) to node [above] {输出} (testin);
			\end{tikzpicture}
		}
		%\caption{传统测试平台的结构}\label{A Basic testbench}
	\end{figure}

\end{frame}

\section{验证流程}\label{The Verification Process}

\begin{frame}[t,fragile]{验证流程}

	\begin{figure}[!htb]
		\centering%\captionsetup{font={small}}\small %small or scriptsize
		\scalebox{0.6}{
			\begin{tikzpicture}%[scale=0.6]
				\tikzstyle{every node}=[on grid, align = center, font=\normalsize, node distance=1.5cm and 5.5cm]
				\tikzstyle{rec} = [draw,thick,minimum height=1.0cm,minimum width=2.5cm]
				%\draw[thick,draw=gray] (-4,-7) grid (7,2);
				\node (Design Specification) [rec] {设计规范};
				\node (Defining Testcase) [rec,below= 2cm of Design Specification] {定义测试用例};
				\node (Testbench Abstract Level) [rec,below=of Defining Testcase] {测试平台\\抽象层次};
				\node (Stimulus Generation) [rec,below=of Testbench Abstract Level] {激励产生方案};
				\node (Result Check) [rec,below=of Stimulus Generation] {结果检查方案};

				\node (Test Strategy Phase) [text width = 0.5cm,below left = 0.75cm and 1.75cm of Testbench Abstract Level] {制定验证策略和验证计划};

				\coordinate (joint1) at ([shift={+(-2.25cm,-1.0cm)}] Result Check);
				\coordinate (joint2) at ([shift={+(1.75cm,1.0cm)}] Defining Testcase);
				\draw[thick,dashed,fill,color=red,fill opacity=0.1] (joint1) rectangle (joint2);
				\draw[thick,-Latex] (Design Specification) -- (Defining Testcase);
				\draw[thick,-Latex] (Defining Testcase) -- (Testbench Abstract Level);
				\draw[thick,-Latex] (Testbench Abstract Level) -- (Stimulus Generation);
				\draw[thick,-Latex] (Stimulus Generation) -- (Result Check);

				\node (Verification Plan) [rec,right=of Design Specification] {验证计划};
				\node (Building Testbench) [rec,below= 2cm of Verification Plan] {搭建测试平台};
				\node (Creating Testcase) [rec,below=of Building Testbench] {创建测试用例};
				\node (running and debug) [rec,below=of Creating Testcase] {运行和调试};

				\node (Building Testbench Phase) [text width = 0.5cm,left = 1.75cm of Creating Testcase] {搭建测试平台};

				\coordinate (joint3) at ([shift={+(-2.25cm,-1.0cm)}] running and debug);
				\coordinate (joint4) at ([shift={+(1.75cm,1.0cm)}] Building Testbench);
				\draw[thick,dashed,fill,color=blue,fill opacity=0.1] (joint3) rectangle (joint4);

				\coordinate (connect1) at ([shift={+(2.25cm,0.0cm)}] Result Check);
				\draw[thick,-Latex] (Result Check) -- (connect1) |- (Verification Plan);

				\draw[thick,-Latex] (Verification Plan) -- (Building Testbench);
				\draw[thick,-Latex] (Building Testbench) -- (Creating Testcase);
				\draw[thick,-Latex] (Creating Testcase) -- (running and debug);

				\node (Coverage Analysis) [rec,below=3cm of running and debug] {所有测试通过\\覆盖率分析};
				\node (Regression Test) [rec,below= 2.0cm of Coverage Analysis] {回归测试};

				\node (Regress and Coverage Phase) [text width = 0.5cm,below left = 1.0cm and 1.75cm of Coverage Analysis] {覆盖率分析和回归测试};

				\coordinate (connect2) at ([shift={+(2.25cm,0.0cm)}] Coverage Analysis);
				\draw[thick,-Latex] (Coverage Analysis) -- (connect2) |- node[pos=0.3,right]{否} (running and debug);

				\coordinate (joint5) at ([shift={+(-2.25cm,-1.5cm)}] Regression Test);
				\coordinate (joint6) at ([shift={+(1.75cm,1.5cm)}] Coverage Analysis);
				\draw[thick,dashed,fill,color=orange,fill opacity=0.1] (joint5) rectangle (joint6);

				\draw[thick,-Latex] (running and debug) -- (Coverage Analysis);
				\draw[thick,-Latex] (Coverage Analysis) -- node [right] {是} (Regression Test);
			\end{tikzpicture}
		}
		%\caption{功能验证流程}	\label{A Basic Verification Flow}
	\end{figure}

\end{frame}

\begin{frame}[t,fragile]{使用和不使用反馈的测试进展}

	\begin{figure}[!htb]
		\centering
		\includegraphics[scale=0.7]{feedback_test.pdf}
		%\caption{使用和不使用反馈的测试进展} \label{ch01 Test progress with and without feedback}
	\end{figure}

\end{frame}

\section{验证语言和验证方法学}

\begin{frame}[t,fragile]{验证语言使用趋势}

	\begin{figure}[!htb]
		\centering
		\includegraphics[scale=0.7]{lang_adopt.pdf}
		%\caption{验证语言使用趋势} \label{ch01 asic verification language adoption}
	\end{figure}

\end{frame}

\begin{frame}[t,fragile]{验证方法学使用趋势}

\begin{figure}[!htb]
	\centering
	\includegraphics[scale=0.7]{veri_adopt.pdf}
	%\caption{验证方法学使用趋势} \label{ch01 verification methodology adoption}
\end{figure}

\end{frame}

\begin{frame}[t,fragile]{验证语言使用趋势}

	基于SystemVerilog的验证方法学主要有以下3种。

	\begin{enumerate}
		\item 验证方法学手册（Verification Methodology Manual，VMM）。
		\item 开放式验证方法学（Open Verification Methodology，OVM）。
		\item UVM（Universal Verification Methodology，UVM）代表了验证方法学的最新发展方向。
	\end{enumerate}

\end{frame}

\section{定向测试和受约束随机测试}\label{Directed and Constrain Testing}

\begin{frame}[t,fragile]{定向测试和受约束随机测试}

	\begin{figure}[!htb]
		\centering
		\includegraphics[scale=0.7]{veri_time.pdf}
		%\caption{定向测试与CRT的验证进度比较} \label{CRT vs DT over time}
	\end{figure}

\end{frame}

\section{层次化测试平台}\label{Layered Testbench}

\begin{frame}[t,fragile]{层次化测试平台}

	\begin{figure}[!htb]
		\centering
		\includegraphics[scale=0.7]{svtb_completed_testbench.pdf}
		%\caption{标准的层次化测试平台}\label{ch01 Full testbench with all layers}
	\end{figure}

\end{frame}

\begin{frame}[t,fragile]{带有数据端口和控制端口的DUT}

	\begin{enumerate}
		\item sequencer类的作用就是将接收到的各种序列转发到对应的driver中。
		\item driver只负责发送激励，不产生激励。
	\end{enumerate}

	\begin{figure}[!htb]
		\centering
		\includegraphics[scale=1.0]{uvm_sequence.pdf}
		%\caption{sequence类与sequencer类的关系} \label{fig uvm sequence}
	\end{figure}

\end{frame}

\section{层次化测试平台的执行}\label{Simulation Environment Phases}

\begin{frame}[t,fragile]{层次化测试平台的执行}

	3个基本运行阶段是：建立（build）、运行（run）和收尾（wrap-up）。

	\begin{enumerate}
		\item 建立阶段分为以下步骤。
		      \begin{enumerate}
			      \item 生成配置：将DUT的配置和周围的环境随机化。
			      \item 建立环境：基于配置来分配和连接测试平台的组件。
			      \item 对DUT进行复位。
			      \item 配置DUT：根据生成的配置，载入DUT的命令寄存器。
		      \end{enumerate}
		\item 运行阶段是指测试实际运行的阶段，可分为以下步骤。
		      \begin{enumerate}
			      \item 启动环境：运行测试平台组件，例如序列发生器。
			      \item 运行测试：启动测试然后等待测试完成。定向测试的结果很容易判断，但随机测试的评估却比较困难。可以使用测试平台的层级作为引导。从顶层启动，上一层级的所有输入都发送到下一层级后，下一层级开始工作。在测试过程中还应该使用超时检测以确保DUT或测试平台不出现死锁。
		      \end{enumerate}
		\item 收尾阶段包含如下两个步骤。
		      \begin{enumerate}
			      \item 清空：在最下层完成以后，需要等待DUT清空最后的事务。
			      \item 报告：一旦DUT空闲下来，就可以清空遗留在测试平台中的数据了。有时候保存在记分板中的数据从来就没有被送出来过，这些数据可能是被DUT丢弃掉的。读者可以根据这些信息创建最终报告、说明测试通过或者失败。如果测试失败，务必把相应的功能覆盖率结果删除，因为它们可能是不正确的。
		      \end{enumerate}
	\end{enumerate}

\end{frame}

\end{document}
